﻿#pragma once

#include "common.h"
#include "base.h"
#include "draw.h"
#include "../video.h"

// ANIP_UNDONE: video

namespace anip
{
	class Shape;
	class Shader;
	class Texture2D;

	namespace vg
	{
		//class Video : public Primitive
		//{
		//private:
		//	class Renderer;

		//	float _pos = 0;

		//	void _gotoFrame(int f)
		//	{
		//		if (f != _pos)
		//			video->setFramePosition(f);
		//	}

		//public:
		//	VideoProvider* video;

		//	kvec2 position;
		//	kvec2 size;
		//	kcolor tint = Colors::white;
		//	bool presentationMode = false;

		//	Video(VideoProvider* vid = nullptr, vec2 pos = { 0, 0 }, vec2 siz = { 1, 1 }) :
		//		video(vid), position(pos), size(siz) {}

		//	void onActivate()
		//	{
		//		if (video != nullptr && presentationMode)
		//		{
		//			video->setFramePosition(0);
		//			_pos = 0;
		//		}
		//	}

		//	void setTime(float t, float frameRate)
		//	{
		//		_time = t;
		//		if (video != nullptr && !presentationMode)
		//		{
		//			int frame = t * video->frameRate() / frameRate;
		//			if (frame != (int)_pos)
		//				video->setFramePosition(frame);
		//			_pos = t;
		//		}
		//	}

		//	void nextFrame(float frameRate)
		//	{
		//		_time++;
		//		if (video != nullptr && !presentationMode)
		//		{/*
		//			int frame = _time * video->frameRate() / frameRate;
		//			while (frame > (int)_pos)*/
		//				video->nextFrame();/*
		//			_pos++;*/
		//		}
		//	}

		//	void nextPresentationFrame(double realTime)
		//	{
		//		if (video != nullptr && presentationMode)
		//		{
		//			int frame = realTime * video->frameRate();
		//			if (frame - _pos > 5)
		//			{
		//				video->setFramePosition(frame);
		//				_pos = frame;
		//			} else while (frame > (int)_pos)
		//			{
		//				video->nextFrame();
		//				_pos++;
		//			}
		//		}
		//	}

		//	void render(const Viewpoint& cam)
		//	{
		//		if (video == nullptr) return;

		//		vec2 vpos = cam.view2screen(position[_time]);
		//		vec2 vsize = cam.view2screenSize(size[_time]);
		//		Draw::texture(vpos, vsize, video->getTexture(), tint[_time]);
		//	}

		//	bool isInside(invec2 p)
		//	{
		//		vec2 pos = position[_time];
		//		vec2 siz = size[_time];

		//		vec2 d = p - pos;
		//		return d.x > 0 && d.y > 0 && d.x < siz.x&& d.y < siz.y;
		//	}
		//};
	}
}